import axios from 'axios';
import qs from 'qs'
import router from '../router';
import { Message, MessageBox } from 'element-ui'
import * as socketApi from './socket'

axios.defaults.withCredentials = true

const serviceFile = axios.create({
    // process.env.NODE_ENV === 'development' 来判断是否开发环境
    // easy-mock服务挂了，暂时不使用了
    baseURL: '/',
    // 超时30s
    timeout: 30000,
});

// 请求拦截器
serviceFile.interceptors.request.use(
    config => {
        // 在请求发送之前做一些处理
        const token = localStorage.getItem('token');
        // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
        config.headers['Authorization'] = "Bearer " + token;
        config.headers['Content-Type'] = "application/x-www-form-urlencoded";
        return config;
    },
    error => {
        // 发送失败
        console.log(error);
        Promise.reject(error);
    }
);

// 登陆后需要将count值为0
let count = 0;

// 响应拦截器
serviceFile.interceptors.response.use(
    response => {
        // dataAxios 是 axios 返回数据中的 data
        const dataAxios = response.data;
        // console.log(dataAxios)
        // return dataAxios;
        // 这个状态码是和后端约定的
        const code = dataAxios.code;
        // 根据 code 进行判断
        if (code != undefined && code == 403) {
            // 1、直接跳转新页面
            if (count === 0) {
                let userId = localStorage.getItem('userId');
                localStorage.removeItem('userId');
                localStorage.removeItem('token');
                // socketApi.sendSock({type:"3",data:userId}, function(){});
                // 跳转页面
                Message.warning("请重新登陆")
                router.replace({
                    path: '/login',
                })
            }
            count++;
            return Promise.reject('Token失效，重新登录')
        } else {
            count = 0;
        }
        return dataAxios;
    },
    error => {
        if (error && error.response) {
            switch (error.response.status) {
                case 400: error.message = '请求错误'; break;
                case 401: error.message = '未授权，请登录'; break;
                case 403: error.message = '拒绝访问'; break;
                case 404: error.message = `请求地址出错: ${error.response.config.url}`; break;
                case 408: error.message = '请求超时'; break;
                case 500: error.message = '服务器内部错误'; break;
                case 501: error.message = '服务未实现'; break;
                case 502: error.message = '网关错误'; break;
                case 503: error.message = '服务不可用'; break;
                case 504: error.message = '网关超时'; break;
                case 505: error.message = 'HTTP版本不受支持'; break;
                default: break;
            }
        }
        // errorLog(error);
        return Promise.reject(error);
    }
);

export default serviceFile;
